﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Presentacion.Contrato.Requerimientos;

namespace Sistema_Totem.Presentacion.Presentador.Requerimientos
{
    public class PresentadorAgregarRequerimiento
    {
        #region Atributos

        private IContratoAgregarRequerimiento _vista;
        private Requerimiento _requerimiento;
        private Comando <Requerimiento> _comandoRequerimiento;

        #endregion Atributos

        #region Constructor

        public PresentadorAgregarRequerimiento(IContratoAgregarRequerimiento 
            iContratoAgregarRequerimiento) 
        {
            _vista = iContratoAgregarRequerimiento;
        }

        #endregion Constructor

        #region Metodos

        #region LLenar GridView

        /// <summary>
        /// Metodo para llevar el gridview con los elementos a elegir por el usuario
        /// de los requerimientos
        /// </summary>
        /// <param name="_requerimiento"></param>
        public void LLenarGridviewSeleccionAtributos(Requerimiento _requerimiento)
        {
 
            // Generar la DataTable de la lista de elementos
            DataTable dataTableElemento = new DataTable();
            //Crea las columnas de la tabla en el GridView
            dataTableElemento.Columns.Add("Nombre", typeof(string));
            
            //Se recorre la lista de secciones de requerimiento 
            foreach (Seccion _seccion in _requerimiento.ListaSeccion)
            {
                //Se recorre la lista de elemento de requerimiento para asignarle al "DataTable"
                foreach (ElementoControl _elemento in _seccion.ListaControl)
                {
                    // llenamos por cada fila el identifica y el nombre del elemento
                    dataTableElemento.Rows.Add(_elemento.Nombre);
                }
            }

            // Seteamos el gridview con el datatabla de los elementos de los requerimientos
            _vista.GVAgregarRequerimientoSecciones.DataSource = dataTableElemento;
            _vista.GVAgregarRequerimientoSecciones.DataBind();
        }

        #endregion LLenar GridView

        #region  Buscar Plantilla Predeterminada

        /// <summary>
        /// Metodo para buscar la plantilla predeterminada de requerimiento
        /// </summary>
        /// <param name="_idProyecto"></param>
        public Requerimiento BuscarPLantillaPredeterminada()
        {
            // llamamos a la variable session que contiene el id del proyecto actual
            Proyecto _miProyecto = (Proyecto)_vista.Sesion["proyecto"];

            // llamamos la a la fabrica comando para llamar a la plantilla vacia de requerimiento
            _comandoRequerimiento = FabricaComando.CrearComandoConsultarPlantillaRequerimiento(_miProyecto.IdProyecto);

            // Ejecutamos el metodo Ejecuta del comando el cual retorna un objeto del tipo requerimiento
            _requerimiento = _comandoRequerimiento.Ejecutar();

            // LLamamos al metodo LLenarGridview y le pasamos por parametro el objeto requerimiento
            LLenarGridviewSeleccionAtributos(_requerimiento);

            return _requerimiento;
        }

        #endregion Buscar Plantilla Predeterminada

        #region Seleccion Siguiente Ventana

        /// <summary>
        /// Metodo para agarrar los atributos seleccionadas 
        /// por el usuario en Gridview.
        /// </summary>
        public Requerimiento SeleccionSiguienteVentana(Requerimiento requerimiento)
        {
            Entidad _RE = FabricaEntidad.NuevoRequerimiento();
            Seccion miSeccion = new Seccion();
            try
            {
                foreach (GridViewRow seccion in _vista.GVAgregarRequerimientoSecciones.Rows)
                {
                    CheckBox seccionCheckeada = seccion.FindControl("chkSeleccionEscoger") as CheckBox;
                    if (seccionCheckeada.Checked)
                    {

                        foreach (Seccion SE in requerimiento.ListaSeccion)
                        {                       
                          foreach (ElementoControl elemento in SE.ListaControl)
                          {
                             if (elemento.Nombre == seccion.Cells[0].Text)
                             {
                               // Guardamos en la lista de elemento los elementos seleccionados por el usuario  
                                // SE.ListaControl.Remove(elemento);
                                miSeccion.ListaControl.Add(elemento);
                             }
                          }                                                
                        }
                    }
                }
                (_RE as Requerimiento).ListaSeccion.Add(miSeccion);
            }
            catch (Exception error)
            {
               /* MensajeDeTransaccion.Text = error.Message;
                MensajeDeTransaccion.CssClass = "transaccionFallida";
                MensajeDeTransaccion.Visible = true;*/
            }
            return (_RE as Requerimiento);
        }

        #endregion Seleccion Siguiente Ventana

        #region NombreReque por Defecto
        /// <summary>
        /// Método que marca por defecto el nombre del
        /// requerimiento.
        /// </summary>
        public void ColocarPorDefectoNombreRequerimiento()
        {
            bool verificar = true;
            foreach (GridViewRow row in _vista.GVAgregarRequerimientoSecciones.Rows)
            {
                CheckBox seccionCheckeada = row.FindControl("chkSeleccionEscoger") as CheckBox;
                if (!seccionCheckeada.Checked)
                {
                    if (verificar)
                    {
                        seccionCheckeada.Checked = true;
                        row.Cells[1].Enabled = false;
                        verificar = false;
                    }
                }
            }
        }

        #endregion NombreReque por Defecto

        #endregion Metodos
    }
}